/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Source;

import java.io.IOException;
import java.util.Date;
import java.util.Enumeration;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import net.jxta.discovery.DiscoveryEvent;
import net.jxta.discovery.DiscoveryListener;
import net.jxta.discovery.DiscoveryService;
import net.jxta.document.MimeMediaType;
import net.jxta.pipe.PipeService;
import net.jxta.protocol.DiscoveryResponseMsg;

/**
 *
 * @author Miguel
 */
public class ThreadCapturaAdvertisments  implements DiscoveryListener {
 private DiscoveryService discovery;

 private Peer peer;

    public ThreadCapturaAdvertisments(DiscoveryService d, Peer p) {
             this.discovery = d;
             peer=p;
             discovery.addDiscoveryListener(this);

    }

    public void discoveryEvent(DiscoveryEvent ev) {
         long lifetime = 60 * 10 * 1000L;
         long expiration = 60 * 10 * 1000L;
        DiscoveryResponseMsg res = ev.getResponse();
         // let's get the responding peer's advertisement
        System.out.println("DISCOVERY_[  Got a Discovery Response [" + res.getResponseCount() + " elements]  from peer : " + ev.getSource() + "  ]");
        AdvertisementAskForFile a;
        AdvertisementSharedFiles adv;
        AdvertisementGuardarEstadoGlobal guardar;

        Enumeration en = res.getAdvertisements();
        if (en != null) {
            while (en.hasMoreElements()) {
               Object obj= en.nextElement();
                  if(obj.toString().equalsIgnoreCase("peticion")){
                         a = (AdvertisementAskForFile)obj;
                         if(a.getTipoAnuncio().equalsIgnoreCase("anuncio")&& !a.getNamePeer().equalsIgnoreCase(peer.darPeerName())
                                 && !a.getNamePeer().equalsIgnoreCase("N/A")){
                             if(peer.verificarArchivoUso(a.getNombreArchivo())){
                                 System.out.println("Bloqueado");
                                    try {

                                        AdvertisementAskForFile aa = new AdvertisementAskForFile();
                                        aa.setType(PipeService.UnicastType);
                                        aa.setID(peer.darPeerID());
                                        aa.setNombreArchivo(a.getNombreArchivo());
                                        aa.setNamePeer(a.getNamePeer());
                                        aa.setTipoAnuncio("respuesta");
                                        aa.setValor("bloqueado");
                                        java.util.Date fecha = new Date();
                                        aa.setFechaCreacion("" + fecha.toString());
                                        System.out.println(aa.getDocument(MimeMediaType.XMLUTF8).toString());
                                        discovery.publish(aa, lifetime, expiration);
                                    } catch (IOException ex) {
                                        Logger.getLogger(Peer.class.getName()).log(Level.SEVERE, null, ex);
                                    }
                             }
                             else{System.out.println("Libre");
                                        try {

                                        AdvertisementAskForFile aa = new AdvertisementAskForFile();
                                        aa.setType(PipeService.UnicastType);
                                        aa.setID(peer.darPeerID());
                                        aa.setNamePeer(a.getNamePeer());
                                        aa.setNombreArchivo(a.getNombreArchivo());
                                        aa.setTipoAnuncio("respuesta");
                                        aa.setValor("libre");
                                        java.util.Date fecha = new Date();
                                        aa.setFechaCreacion("" + fecha.toString());
                                        System.out.println(aa.getDocument(MimeMediaType.XMLUTF8).toString());
                                        discovery.publish(aa, lifetime, expiration);
                                    } catch (IOException ex) {
                                        Logger.getLogger(Peer.class.getName()).log(Level.SEVERE, null, ex);
                                    }}
                         }
                        else if(a.getTipoAnuncio().equalsIgnoreCase("respuesta")&& a.getNamePeer().equalsIgnoreCase(peer.darPeerName())){

                            if(a.getValor().equalsIgnoreCase("bloqueado")){
                                System.out.println("Bloqueado"+peer.darPeerName()+" llego"+ a.getNamePeer());
                                     // JOptionPane.showMessageDialog(null, "El Archivo esta siendo Utilizado por Otra Persona", "Archivo Ocupado", JOptionPane.INFORMATION_MESSAGE);
                                peer.cambiarVariableGlobal(false);
                             }
                             else if(a.getValor().equalsIgnoreCase("libre")){
                                 
                                }
                        }

                 }else if(obj.toString().equalsIgnoreCase("Guardar")){
                                System.out.println("Recibio Guardado Solicitud");
                                 guardar= (AdvertisementGuardarEstadoGlobal)obj;
                                 if(!guardar.getNombrePeer().equalsIgnoreCase(peer.darPeerName())){
                                     System.out.println("Guardando");
                                        peer.guardarEstadoNodoPorNotificacion();
                                 }

                 }
                  else{
                        adv = (AdvertisementSharedFiles) obj;
                        peer.ClasificarBusqueda(adv);
                }
                }
             }
    }


    }